// import com.alibaba.druid.DbType_ptr;
// import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor_ptr;
// import com.alibaba.druid.util.FnvHash;

// import java.sql.Types;
// import java.util.ArrayList;
// import java.util.List;
#pragma once
#include "../../utils/common_ptr.h"
#include "SQLObjectImpl.h"
#include "SQLDataType.h"

class SQLArrayDataType
    : virtual public SQLObjectImpl,
      virtual public SQLDataType
{
public:
  static SQLArrayDataType_ptr ARRYA_CHAR;

  DbType_ptr dbType;
  SQLDataType_ptr componentType;
  SQLExpr_list_ptr arguments;

  SQLArrayDataType(SQLDataType_ptr componentType);

  SQLArrayDataType(SQLDataType_ptr componentType, DbType_ptr dbType);

  SHAREDOBJECT(SQLArrayDataType)   ;
  // @Override
  string_ptr getName() override;

  // @Override
  long nameHashCode64() override;

  // @Override
  void setName(string_ptr name) override;

  // @Override
  SQLExpr_list_ptr getArguments() override;

  // @Override
  BOOL_ptr getWithTimeZone() override;

  // @Override
  void setWithTimeZone(BOOL_ptr value) override;

  // @Override
  BOOL_ptr isWithLocalTimeZone() override;

  // @Override
  void setWithLocalTimeZone(BOOL_ptr value) override;

  // @Override
  void setDbType(DbType_ptr dbType) override;

  // @Override
  DbType_ptr getDbType() override;

  // @Override
  void accept0(SQLASTVisitor_ptr visitor) override;

  SQLObject_ptr clone();

  SQLDataType_ptr getComponentType();

  void setComponentType(SQLDataType_ptr x);

  int jdbcType();

  // @Override
  BOOL_ptr isInt() override;

  // @Override
  BOOL_ptr isNumberic() override;

  // @Override
  BOOL_ptr isString() override;

  // @Override
  BOOL_ptr hasKeyLength() override;
};
